package es.javamyadmin.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.javamyadmin.beans.LoginBean;
import es.javamyadmin.modelo.Databases;
import es.javamyadmin.pojo.Error;
import es.javamyadmin.pojo.Mensaje;
/**
 * Servlet que obtiene los nombres de las bases de datos
 * @author Emilio Javier Castillo Gonzalez
 * @author Hector Delgado Duran
 *
 */
public class ListasBasesDatosServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 748163728181239813L;

	/**
	 * Metodo que llama a doPost
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * Metodo que consulta el nombre de las bases de datos
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		LoginBean datosLogin = new LoginBean();
		
		datosLogin = (LoginBean) request.getSession().getAttribute("datosLogin");
		
		String user = datosLogin.getUsuario();     
        String pass = datosLogin.getPassword();
        String host = datosLogin.getServidor();
        String port = datosLogin.getPuerto();
		
        Connection conexion = null;
    	Statement estamento = null;
    	PreparedStatement preparada = null;
    	ResultSet resultado = null;
		
		Error error = null;
		
		if(conexion==null){
			try{
				Class.forName("com.mysql.jdbc.Driver");                
	      	    conexion=DriverManager.getConnection("jdbc:mysql://"+host+":"+port+"/", user, pass);
	      	    
	      	    PreparedStatement pstm = conexion.prepareStatement("SHOW DATABASES");
	      	    resultado = pstm.executeQuery();
	      	    
	      	    Collection<Databases> lista = new ArrayList<Databases>();
	      	    
	      	    while(resultado.next()){
	      	    	Databases coleccion = new Databases();
					coleccion.setNombreBD(resultado.getString(1));
					System.out.println("- "+resultado.getString(1));
					lista.add(coleccion);
	      	    }
	      	    
	      	  request.getRequestDispatcher("prueba.jsp").forward(request,response);	
	      	    
			} catch(SQLException e){
				e.printStackTrace();
				error = new Error(Mensaje.getMensaje(getServletContext().getResourceAsStream("/WEB-INF/properties/mensajes.properties"),String.valueOf(e.getErrorCode())), e.getMessage(), "");
				System.out.println("Error en --> "+error);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(resultado != null){
					try {
						resultado.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					resultado = null;
				}
				if(estamento != null){
					try {
						estamento.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					estamento = null;
				}
				if(preparada != null){
					try {
						preparada.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					preparada = null;
				}
				if(conexion != null){
					try {
						conexion.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					conexion = null;
				}
			}
		}
		
	}

}
